// Copyright 2017 Proyectos y Sistemas de Mantenimiento SL (eProsima).
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ------------------------------------------------------------------
// Modification history:
// feature: Support static xml filter by participant name
// feature: add qos incompatible check, and add system test case
// ------------------------------------------------------------------

#include <xmlparser/XMLParserCommonPart.h>

namespace vbsutil {
namespace xmlparser {

const char* xmlString::SHM_SAMPLE_DESCRIPTOR = "SHM_SAMPLE_DESCRIPTOR";
const char* xmlString::QUEUE_WAKE_UP_MODE = "queue_wake_up_mode";
const char* xmlString::QUEUE_SIZE = "queue_size";

const char* xmlString::DEFAULT_ERTPS_ENV_VARIABLE = "ERTPS_DEFAULT_PROFILES_FILE";
const char* xmlString::DEFAULT_ERTPS_PROFILES = "DEFAULT_ERTPS_PROFILES.xml";
const char* xmlString::DEFAULT_STATISTICS_DATAWRITER_PROFILE = "GENERIC_STATISTICS_PROFILE";
const char* xmlString::SKIP_DEFAULT_XML_FILE = "SKIP_DEFAULT_XML_FILE";

const char* xmlString::VBS = "vbs";
const char* xmlString::AGENT = "agent";
const char* xmlString::RPC = "rpc";
const char* xmlString::DDS = "dds";
const char* xmlString::PROFILES = "profiles";
const char* xmlString::BASEXML = "basexml";
const char* xmlString::LIBRARY_SETTINGS = "library_settings";
const char* xmlString::TRANSPORT_DESCRIPTORS = "transport_descriptors";
const char* xmlString::PROFILE_NAME = "profile_name";
const char* xmlString::DEFAULT_PROF = "is_default_profile";
const char* xmlString::BASE_NAME = "base_name";
const char* xmlString::PARTICIPANT = "participant";
const char* xmlString::PUBLISHER = "publisher";
const char* xmlString::SUBSCRIBER = "subscriber";
const char* xmlString::RTPS = "rtps";
const char* xmlString::TYPES = "types";
const char* xmlString::LOG = "log";
const char* xmlString::ALLOWED_TOPIC = "allowed_topic";
const char* xmlString::SECURITY = "security";

const char* xmlString::TRANSPORT_DESCRIPTOR = "transport_descriptor";
const char* xmlString::TRANSPORT_ID = "transport_id";
const char* xmlString::UDP_OUTPUT_PORT = "output_port";
const char* xmlString::UDP_SOCKET_TYPE = "socket_type";
const char* xmlString::XDP_RX_QUEUE_NUM = "xdp_rx_queue_num";
const char* xmlString::TCP_WAN_ADDR = "wan_addr";
const char* xmlString::RECEIVE_BUFFER_SIZE = "receiveBufferSize";
const char* xmlString::SEND_BUFFER_SIZE = "sendBufferSize";
const char* xmlString::TTL = "TTL";
const char* xmlString::NON_BLOCKING_SEND = "non_blocking_send";
const char* xmlString::WHITE_LIST = "interfaceWhiteList";
const char* xmlString::MAX_MESSAGE_SIZE = "maxMessageSize";
const char* xmlString::MAX_INITIAL_PEERS_RANGE = "maxInitialPeersRange";
const char* xmlString::KEEP_ALIVE_FREQUENCY = "keep_alive_frequency_ms";
const char* xmlString::KEEP_ALIVE_TIMEOUT = "keep_alive_timeout_ms";
const char* xmlString::MAX_LOGICAL_PORT = "max_logical_port";
const char* xmlString::LOGICAL_PORT_RANGE = "logical_port_range";
const char* xmlString::LOGICAL_PORT_INCREMENT = "logical_port_increment";
const char* xmlString::ENABLE_TCP_NODELAY = "enable_tcp_nodelay";
const char* xmlString::METADATA_LOGICAL_PORT = "metadata_logical_port";
const char* xmlString::LISTENING_PORTS = "listening_ports";
const char* xmlString::CALCULATE_CRC = "calculate_crc";
const char* xmlString::CHECK_CRC = "check_crc";
const char* xmlString::SEGMENT_SIZE = "segment_size";
const char* xmlString::PORT_QUEUE_CAPACITY = "port_queue_capacity";
const char* xmlString::PORT_OVERFLOW_POLICY = "port_overflow_policy";
const char* xmlString::SEGMENT_OVERFLOW_POLICY = "segment_overflow_policy";
const char* xmlString::HEALTHY_CHECK_TIMEOUT_MS = "healthy_check_timeout_ms";
const char* xmlString::DISCARD = "DISCARD";
const char* xmlString::FAIL = "FAIL";
const char* xmlString::RTPS_DUMP_FILE = "rtps_dump_file";
const char* xmlString::ON = "ON";

const char* xmlString::OFF = "OFF";
const char* xmlString::USER_DATA_ONLY = "USER_DATA_ONLY";
const char* xmlString::FULL = "FULL";

const char* xmlString::QOS_PROFILE = "qos_profile";
const char* xmlString::APPLICATION = "application";
const char* xmlString::TYPE = "type";
// const char* xmlString::TOPIC = "topic";
const char* xmlString::DATA_WRITER = "data_writer";
const char* xmlString::DATA_READER = "data_reader";

/// RTPS Domain attributes
const char* xmlString::INTRAPROCESS_DELIVERY = "intraprocess_delivery";

/// RTPS Participant attributes
const char* xmlString::ALLOCATION = "allocation";
const char* xmlString::PREFIX = "prefix";
const char* xmlString::DEF_EXT_UNI_LOC_LIST = "default_external_unicast_locators";
const char* xmlString::DEF_UNI_LOC_LIST = "defaultUnicastLocatorList";
const char* xmlString::DEF_MULTI_LOC_LIST = "defaultMulticastLocatorList";
const char* xmlString::SEND_SOCK_BUF_SIZE = "sendSocketBufferSize";
const char* xmlString::LIST_SOCK_BUF_SIZE = "listenSocketBufferSize";
const char* xmlString::BUILTIN = "builtin";
const char* xmlString::PORT = "port";
const char* xmlString::PORTS = "ports_";
const char* xmlString::LOGICAL_PORT = "logical_port";
const char* xmlString::PHYSICAL_PORT = "physical_port";
const char* xmlString::PART_ID = "participantID";
const char* xmlString::USER_TRANS = "userTransports";
const char* xmlString::USE_BUILTIN_TRANS = "useBuiltinTransports";
const char* xmlString::TRANSPORT_TYPE = "transport_type";
const char* xmlString::PROPERTIES_POLICY = "propertiesPolicy";
const char* xmlString::FLOW_CONTROLLER = "flowController";
const char* xmlString::FLOW_CONTROL_DESCRIPTOR = "descriptor";
const char* xmlString::NAME = "name";
const char* xmlString::SAVEMODE = "savemode";
const char* xmlString::REMOTE_LOCATORS = "remote_locators";
const char* xmlString::MAX_UNICAST_LOCATORS = "max_unicast_locators";
const char* xmlString::MAX_MULTICAST_LOCATORS = "max_multicast_locators";
const char* xmlString::TOTAL_PARTICIPANTS = "total_participants";
const char* xmlString::TOTAL_READERS = "total_readers";
const char* xmlString::TOTAL_WRITERS = "total_writers";
const char* xmlString::SEND_BUFFERS = "send_buffers";
const char* xmlString::PREALLOCATED_NUMBER = "preallocated_number";
const char* xmlString::DYNAMIC_LC = "dynamic";
const char* xmlString::MAX_PROPERTIES = "max_properties";
const char* xmlString::MAX_USER_DATA = "max_user_data";
const char* xmlString::MAX_PARTITIONS = "max_partitions";

/// Publisher-subscriber attributes
const char* xmlString::TOPIC = "topic";
const char* xmlString::QOS = "qos";
const char* xmlString::TIMES = "times";
const char* xmlString::EXT_UNI_LOC_LIST = "external_unicast_locators";
const char* xmlString::UNI_LOC_LIST = "unicastLocatorList";
const char* xmlString::MULTI_LOC_LIST = "multicastLocatorList";
const char* xmlString::REM_LOC_LIST = "remoteLocatorList";
const char* xmlString::HIST_MEM_POLICY = "historyMemoryPolicy";
// const char* xmlString::PROPERTIES_POLICY = "propertiesPolicy";
const char* xmlString::USER_DEF_ID = "userDefinedID";
const char* xmlString::ENTITY_ID = "entityID";
const char* xmlString::MATCHED_SUBSCRIBERS_ALLOCATION = "matchedSubscribersAllocation";
const char* xmlString::MATCHED_PUBLISHERS_ALLOCATION = "matchedPublishersAllocation";

///
const char* xmlString::IGN_NON_MATCHING_LOCS = "ignore_non_matching_locators";
const char* xmlString::PROPERTIES = "properties";
const char* xmlString::BIN_PROPERTIES = "binary_properties";
const char* xmlString::PROPERTY = "property";
const char* xmlString::VALUE = "value";
const char* xmlString::PROPAGATE = "propagate";
const char* xmlString::PREALLOCATED = "PREALLOCATED";
const char* xmlString::PREALLOCATED_WITH_REALLOC = "PREALLOCATED_WITH_REALLOC";
const char* xmlString::DYNAMIC = "DYNAMIC";
const char* xmlString::DYNAMIC_REUSABLE = "DYNAMIC_REUSABLE";
const char* xmlString::AUTOMATIC_MEMORY = "AUTOMATIC";
const char* xmlString::LOCATOR = "locator";
const char* xmlString::UDPv4_LOCATOR = "udpv4";
const char* xmlString::UDPv6_LOCATOR = "udpv6";
const char* xmlString::TCPv4_LOCATOR = "tcpv4";
const char* xmlString::TCPv6_LOCATOR = "tcpv6";
const char* xmlString::UDS_LOCATOR = "uds";
const char* xmlString::KIND = "kind";
const char* xmlString::ADDRESS = "address";
const char* xmlString::ORDER = "order";
const char* xmlString::WHITE_LIST_ADDRESS = "whiteListAddress";
const char* xmlString::UNIQUE_LAN_ID = "unique_lan_id";
const char* xmlString::WAN_ADDRESS = "wan_address";
const char* xmlString::RESERVED = "RESERVED";
const char* xmlString::UDPv4 = "UDPv4";
const char* xmlString::UDPv6 = "UDPv6";
const char* xmlString::TCPv4 = "TCPv4";
const char* xmlString::TCPv6 = "TCPv6";
const char* xmlString::SHM = "SHM";
const char* xmlString::SHARED_SHM_QUEUE = "SHARED_SHM_QUEUE";
#ifdef EDDS_IPC_TRANSPORT
const char* xmlString::IPC = "IPC";
#endif
const char* xmlString::TRANSPORT_TYPE_UDP = "UDP";
const char* xmlString::TRANSPORT_TYPE_ALL = "ALL";
const char* xmlString::TRANSPORT_TYPE_AUTO = "Auto";
const char* xmlString::INIT_ACKNACK_DELAY = "initialAcknackDelay";
const char* xmlString::HEARTB_RESP_DELAY = "heartbeatResponseDelay";
const char* xmlString::INIT_HEARTB_DELAY = "initialHeartbeatDelay";
const char* xmlString::HEARTB_PERIOD = "heartbeatPeriod";
const char* xmlString::NACK_RESP_DELAY = "nackResponseDelay";
const char* xmlString::NACK_SUPRESSION = "nackSupressionDuration";
const char* xmlString::BY_NAME = "durationbyname";
const char* xmlString::BY_VAL = "durationbyval";
const char* xmlString::SECONDS = "sec";
const char* xmlString::NANOSECONDS = "nanosec";
const char* xmlString::SHARED = "SHARED";
const char* xmlString::EXCLUSIVE = "EXCLUSIVE";
const char* xmlString::FAST_HEARTB_PERIOD = "fastHeartbeatPeriod";
// For backward compatibility we allow any DURATION_XXX in duration_t element and any subelement
// const char* DURATION_INFINITY = R"xsd(\s*DURATION_INFINITY\s*)xsd";
// const char* DURATION_INFINITE_SEC = R"xsd(\s*(DURATION_INFINITY|DURATION_INFINITE_SEC)\s*)xsd";
// const char* DURATION_INFINITE_NSEC = R"xsd(\s*(DURATION_INFINITY|DURATION_INFINITE_NSEC)\s*)xsd";
const char* xmlString::DURATION_INFINITY =
    R"xsd(\s*(DURATION_INFINITY|DURATION_INFINITE_SEC|DURATION_INFINITE_NSEC)\s*)xsd";
const char* xmlString::DURATION_INFINITE_SEC = DURATION_INFINITY;
const char* xmlString::DURATION_INFINITE_NSEC = DURATION_INFINITY;
/// QOS
const char* xmlString::DURABILITY = "durability";
const char* xmlString::DEADLINE = "deadline";
const char* xmlString::LIVELINESS = "liveliness";
const char* xmlString::RELIABILITY = "reliability";
const char* xmlString::LIFESPAN = "lifespan";
const char* xmlString::OWNERSHIP = "ownership";
const char* xmlString::OWNERSHIP_STRENGTH = "ownershipStrength";
const char* xmlString::PARTITION = "partition";
const char* xmlString::PUB_MODE = "publishMode";
const char* xmlString::DISABLE_POSITIVE_ACKS = "disablePositiveAcks";
const char* xmlString::BATCH = "batch";
const char* xmlString::ENABLE = "enable";
const char* xmlString::MAX_DATA_BYTES = "max_data_bytes";
const char* xmlString::MAX_FLUSH_DELAY = "max_flush_delay";
const char* xmlString::DISABLE_HEARTBEAT_PIGGYBACK = "disable_heartbeat_piggyback";
const char* xmlString::HEARTBEAT_PER_MAX_SAMPLE = "heartbeat_per_max_samples";
const char* xmlString::HIGH_WATERMARK = "high_watermark";
const char* xmlString::LOW_WATERMARK = "low_watermark";

const char* xmlString::SYNCHRONOUS = "SYNCHRONOUS";
const char* xmlString::ASYNCHRONOUS = "ASYNCHRONOUS";
const char* xmlString::FLOW_CONTROLLER_NAME = "flowControllerName";
const char* xmlString::NAMES = "names";
const char* xmlString::INSTANCE = "INSTANCE";
const char* xmlString::GROUP = "GROUP";
const char* xmlString::COHERENT_ACCESS = "coherent_access";
const char* xmlString::ORDERED_ACCESS = "ordered_access";
const char* xmlString::BY_RECEPTION_TIMESTAMP = "BY_RECEPTION_TIMESTAMP";
const char* xmlString::BY_SOURCE_TIMESTAMP = "BY_SOURCE_TIMESTAMP";
const char* xmlString::MIN_SEPARATION = "minimum_separation";
const char* xmlString::DURATION = "duration";
const char* xmlString::MAX_BLOCK_TIME = "max_blocking_time";
const char* xmlString::_BEST_EFFORT = "BEST_EFFORT";
const char* xmlString::_RELIABLE = "RELIABLE";
const char* xmlString::AUTOMATIC = "AUTOMATIC";
const char* xmlString::MANUAL_BY_PARTICIPANT = "MANUAL_BY_PARTICIPANT";
const char* xmlString::MANUAL_BY_TOPIC = "MANUAL_BY_TOPIC";
const char* xmlString::LEASE_DURATION = "lease_duration";
const char* xmlString::ANNOUNCE_PERIOD = "announcement_period";
const char* xmlString::COUNT = "count";
const char* xmlString::PERIOD = "period";
const char* xmlString::SRV_CLEAN_DELAY = "service_cleanup_delay";
const char* xmlString::HISTORY_KIND = "history_kind";
const char* xmlString::HISTORY_DEPTH = "history_depth";
const char* xmlString::MAX_SAMPLES = "max_samples";
const char* xmlString::MAX_INSTANCES = "max_instances";
const char* xmlString::MAX_SAMPLES_INSTANCE = "max_samples_per_instance";
const char* xmlString::ALLOCATED_SAMPLES = "allocated_samples";
const char* xmlString::EXTRA_SAMPLES = "extra_samples";
const char* xmlString::_VOLATILE = "VOLATILE";
const char* xmlString::_TRANSIENT_LOCAL = "TRANSIENT_LOCAL";
const char* xmlString::_TRANSIENT = "TRANSIENT";
const char* xmlString::_PERSISTENT = "PERSISTENT";
const char* xmlString::KEEP_LAST = "KEEP_LAST";
const char* xmlString::KEEP_ALL = "KEEP_ALL";
const char* xmlString::_NO_KEY = "NO_KEY";
const char* xmlString::_WITH_KEY = "WITH_KEY";
const char* xmlString::DATA_TYPE = "dataType";
const char* xmlString::SEND_MULTI = "sendMulti";
const char* xmlString::HISTORY_QOS = "historyQos";
const char* xmlString::RES_LIMITS_QOS = "resourceLimitsQos";
const char* xmlString::DEPTH = "depth";
const char* xmlString::SCHEDULE_MODE = "scheduleMode";
const char* xmlString::BYTES_PER_SECOND = "bytesPerPeriod";
const char* xmlString::PERIOD_MILLISECS = "periodMillisecs";
const char* xmlString::FIFO = "FIFO";
const char* xmlString::ROUND_ROBIN = "RR";
const char* xmlString::HIGH_PRIORITY = "SP";
const char* xmlString::PRIORITY_WITH_RESERVATION = "PWR";
const char* xmlString::PORT_BASE = "portBase";
const char* xmlString::DOMAIN_ID_GAIN = "domainIDGain";
const char* xmlString::PARTICIPANT_ID_GAIN = "participantIDGain";
const char* xmlString::OFFSETD0 = "offsetd0";
const char* xmlString::OFFSETD1 = "offsetd1";
const char* xmlString::OFFSETD2 = "offsetd2";
const char* xmlString::OFFSETD3 = "offsetd3";
const char* xmlString::RTPS_PDP_TYPE = "discoveryProtocol";
const char* xmlString::_NONE = "NONE";
const char* xmlString::IGNORE_PARTICIPANT_FLAGS = "ignoreParticipantFlags";
const char* xmlString::_FILTER_DIFFERENT_HOST = "FILTER_DIFFERENT_HOST";
const char* xmlString::_FILTER_DIFFERENT_PROCESS = "FILTER_DIFFERENT_PROCESS";
const char* xmlString::_FILTER_SAME_PROCESS = "FILTER_SAME_PROCESS";
const char* xmlString::WRITER_LVESS_PROTOCOL = "use_WriterLivelinessProtocol";
const char* xmlString::DISCOVERY_SETTINGS = "discovery_config";
const char* xmlString::_EDP = "EDP";
const char* xmlString::DOMAIN_ID = "domainId";
const char* xmlString::LEASEDURATION = "leaseDuration";
const char* xmlString::LEASE_ANNOUNCE = "leaseAnnouncement";
const char* xmlString::INITIAL_ANNOUNCEMENTS = "initialAnnouncements";
const char* xmlString::AVOID_BUILTIN_MULTICAST = "avoid_builtin_multicast";
const char* xmlString::USE_CLIENT = "use_client";
const char* xmlString::USE_SERVER = "use_server";
const char* xmlString::SIMPLE_EDP = "simpleEDP";
const char* xmlString::META_EXT_UNI_LOC_LIST = "metatraffic_external_unicast_locators";
const char* xmlString::META_UNI_LOC_LIST = "metatrafficUnicastLocatorList";
const char* xmlString::META_MULTI_LOC_LIST = "metatrafficMulticastLocatorList";
const char* xmlString::INIT_PEERS_LIST = "initialPeersList";
const char* xmlString::CLIENTANNOUNCEMENTPERIOD = "clientAnnouncementPeriod";
const char* xmlString::SERVER_LIST = "discoveryServersList";
const char* xmlString::RSERVER = "RemoteServer";
const char* xmlString::_SIMPLE = "SIMPLE";
const char* xmlString::_STATIC = "STATIC";
const char* xmlString::_CLIENT = "CLIENT";
const char* xmlString::_SUPER_CLIENT = "SUPER_CLIENT";
const char* xmlString::_SERVER = "SERVER";
const char* xmlString::_BACKUP = "BACKUP";
const char* xmlString::PUBWRITER_SUBREADER = "PUBWRITER_SUBREADER";
const char* xmlString::PUBREADER_SUBWRITER = "PUBREADER_SUBWRITER";
const char* xmlString::STATIC_ENDPOINT_XML = "staticEndpointXMLFilename";
const char* xmlString::STATIC_ENDPOINT_XML_URI = "static_edp_xml_config";
const char* xmlString::STATIC_EDP_CONFIG = "static_edp_config";
const char* xmlString::READER_HIST_MEM_POLICY = "readerHistoryMemoryPolicy";
const char* xmlString::WRITER_HIST_MEM_POLICY = "writerHistoryMemoryPolicy";
const char* xmlString::READER_PAYLOAD_SIZE = "readerPayloadSize";
const char* xmlString::WRITER_PAYLOAD_SIZE = "writerPayloadSize";
const char* xmlString::MUTATION_TRIES = "mutation_tries";
const char* xmlString::ACCESS_SCOPE = "access_scope";
const char* xmlString::ENABLED = "enabled";
const char* xmlString::DOMAIN_IDS = "domain_ids";
const char* xmlString::SHARED_DIR = "shared_dir";
const char* xmlString::MAX_DOMAINS = "max_domains";
const char* xmlString::DEST_ORDER = "destinationOrder";
const char* xmlString::IS_COMPATIBLE = "isCompatible";
const char* xmlString::DOMAIN_ID_LIST = "domainIdList";

// Endpoint parser
const char* xmlString::STATICDISCOVERY = "staticdiscovery";
const char* xmlString::_READER = "reader";
const char* xmlString::_WRITER = "writer";
const char* xmlString::USER_ID = "userId";
const char* xmlString::TOPIC_NAME = "topicName";
const char* xmlString::TOPIC_DATA_TYPE = "topicDataType";
const char* xmlString::TOPIC_KIND = "topicKind";
const char* xmlString::RELIABILITY_QOS = "reliabilityQos";
const char* xmlString::UNICAST_LOCATOR = "unicastLocator";
const char* xmlString::MULTICAST_LOCATOR = "multicastLocator";
const char* xmlString::_RELIABLE_RELIABILITY_QOS = "RELIABLE_RELIABILITY_QOS";
const char* xmlString::_BEST_EFFORT_RELIABILITY_QOS = "BEST_EFFORT_RELIABILITY_QOS";
const char* xmlString::DURABILITY_QOS = "durabilityQos";
const char* xmlString::_PERSISTENT_DURABILITY_QOS = "PERSISTENT_DURABILITY_QOS";
const char* xmlString::_TRANSIENT_DURABILITY_QOS = "TRANSIENT_DURABILITY_QOS";
const char* xmlString::_TRANSIENT_LOCAL_DURABILITY_QOS = "TRANSIENT_LOCAL_DURABILITY_QOS";
const char* xmlString::_VOLATILE_DURABILITY_QOS = "VOLATILE_DURABILITY_QOS";
const char* xmlString::OWNERSHIP_QOS = "ownershipQos";
const char* xmlString::OWNERSHIP_KIND_NOT_PRESENT = "OWNERHSIP kind NOT PRESENT";
const char* xmlString::_SHARED_OWNERSHIP_QOS = "SHARED_OWNERSHIP_QOS";
const char* xmlString::_EXCLUSIVE_OWNERSHIP_QOS = "EXCLUSIVE_OWNERSHIP_QOS";
const char* xmlString::PARTITION_QOS = "partitionQos";
const char* xmlString::LIVELINESS_QOS = "livelinessQos";
const char* xmlString::LIVELINESS_KIND_NOT_PRESENT = "LIVELINESS kind NOT PRESENT";
const char* xmlString::_AUTOMATIC_LIVELINESS_QOS = "AUTOMATIC_LIVELINESS_QOS";
const char* xmlString::_MANUAL_BY_PARTICIPANT_LIVELINESS_QOS = "MANUAL_BY_PARTICIPANT_LIVELINESS_QOS";
const char* xmlString::_MANUAL_BY_TOPIC_LIVELINESS_QOS = "MANUAL_BY_TOPIC_LIVELINESS_QOS";
const char* xmlString::LEASE_DURATION_MS = "leaseDuration_ms";
const char* xmlString::_INF = "INF";
const char* xmlString::VBS_UNKNOWN_STRING = "VBS_UNKNOWN_STRING";
const char* xmlString::STRENGTH = "strength";
const char* xmlString::DEADLINE_QOS = "deadlineQos";
const char* xmlString::PERIOD_MS = "period_ms";

// TYPES parser
const char* xmlString::BOOLEAN = "boolean";
const char* xmlString::CHAR = "char8";
const char* xmlString::WCHAR = "char16";
const char* xmlString::TBYTE = "byte";
const char* xmlString::OCTET = "octet";
const char* xmlString::UINT8 = "uint8";
const char* xmlString::INT8 = "int8";
const char* xmlString::SHORT = "int16";
const char* xmlString::LONG = "int32";
const char* xmlString::USHORT = "uint16";
const char* xmlString::ULONG = "uint32";
const char* xmlString::LONGLONG = "int64";
const char* xmlString::ULONGLONG = "uint64";
const char* xmlString::FLOAT = "float32";
const char* xmlString::DOUBLE = "float64";
const char* xmlString::LONGDOUBLE = "float128";
const char* xmlString::STRING = "string";
const char* xmlString::WSTRING = "wstring";
const char* xmlString::LITERAL = "literal";
const char* xmlString::STRUCT = "struct";
const char* xmlString::UNION = "union";
const char* xmlString::SEQUENCE = "sequence";
const char* xmlString::MAP = "map";
const char* xmlString::TYPEDEF = "typedef";
const char* xmlString::BITSET = "bitset";
const char* xmlString::BITMASK = "bitmask";
const char* xmlString::ENUM = "enum";
const char* xmlString::CASE = "case";
const char* xmlString::DEFAULT = "default";
const char* xmlString::DISCRIMINATOR = "discriminator";
const char* xmlString::CASE_DISCRIMINATOR = "caseDiscriminator";
const char* xmlString::ARRAY_DIMENSIONS = "arrayDimensions";
const char* xmlString::STR_MAXLENGTH = "stringMaxLength";
const char* xmlString::SEQ_MAXLENGTH = "sequenceMaxLength";
const char* xmlString::MAP_MAXLENGTH = "mapMaxLength";
const char* xmlString::MAP_KEY_TYPE = "key_type";
const char* xmlString::ENUMERATOR = "enumerator";
const char* xmlString::NON_BASIC_TYPE = "nonBasic";
const char* xmlString::NON_BASIC_TYPE_NAME = "nonBasicTypeName";
const char* xmlString::EPKEY = "Key";
const char* xmlString::ID = "id";
const char* xmlString::ANNO_OPTIONAL = "optional";
const char* xmlString::EXTENSIBILITY = "extensibility";
const char* xmlString::KEY = "key";
const char* xmlString::MEMBER = "member";
const char* xmlString::BITFIELD = "bitfield";
const char* xmlString::BIT_VALUE = "bit_value";
const char* xmlString::POSITION = "position";
const char* xmlString::BIT_BOUND = "bit_bound";
const char* xmlString::BASE_TYPE = "baseType";

// LOG
const char* xmlString::LEVEL = "level";
const char* xmlString::USE_DEFAULT = "use_default";
const char* xmlString::CONSUMER = "consumer";
const char* xmlString::CLASS = "class";
const char* xmlString::MSG_BRIEF_LIMIT = "msg_brief_limit";
const char* xmlString::XML_ERROR = "Error";
const char* xmlString::XML_WARNING = "Warning";
const char* xmlString::XML_INFO = "Info";
const char* xmlString::XML_EVENT = "Event";
const char* xmlString::DEBUG_ = "Debug";
const char* xmlString::LATENCY_THRESHOLD = "latency_threshold";
const char* xmlString::PERIOD_METRICS_INTERVAL = "period_metrics_interval";
const char* xmlString::REPORT_WITH_PKTCOUNT = "reportWithPktCount";
const char* xmlString::PKTLOSSRATE_THRESHOLD = "packetlossrate_threshold";
const char* xmlString::THROUGHPUT_THRESHOLD = "throughput_threshold";
const char* xmlString::LOG_PERIOD = "log_period";
const char* xmlString::MSG_TRACE_MASK = "msg_trace_mask";
const char* xmlString::MSG_TOPIC_FILTER = "msg_topic_filter";
const char* xmlString::MSG_BRIEF_MODE = "msg_brief_mode";

// Allocation config
const char* xmlString::INITIAL = "initial";
const char* xmlString::MAXIMUM = "maximum";
const char* xmlString::INCREMENT = "increment";

// TLS Config
const char* xmlString::TLS = "tls";
const char* xmlString::TLS_PASSWORD = "password";
const char* xmlString::TLS_OPTIONS = "options";
const char* xmlString::TLS_CERT_CHAIN_FILE = "cert_chain_file";
const char* xmlString::TLS_PRIVATE_KEY_FILE = "private_key_file";
const char* xmlString::TLS_TMP_DH_FILE = "tmp_dh_file";
const char* xmlString::TLS_VERIFY_FILE = "verify_file";
const char* xmlString::TLS_VERIFY_MODE = "verify_mode";
const char* xmlString::TLS_VERIFY_PATHS = "verify_paths";
const char* xmlString::TLS_DEFAULT_VERIFY_PATH = "default_verify_path";
const char* xmlString::TLS_VERIFY_DEPTH = "verify_depth";
const char* xmlString::TLS_RSA_PRIVATE_KEY_FILE = "rsa_private_key_file";
const char* xmlString::TLS_HANDSHAKE_ROLE = "handshake_role";
const char* xmlString::TLS_SERVER_NAME = "server_name";

// TLS HandShake Role
const char* xmlString::TLS_HANDSHAKE_ROLE_DEFAULT = "DEFAULT";
const char* xmlString::TLS_HANDSHAKE_ROLE_CLIENT = "CLIENT";
const char* xmlString::TLS_HANDSHAKE_ROLE_SERVER = "SERVER";

// TLS Verify Stuff
const char* xmlString::TLS_VERIFY_PATH = "verify_path";
const char* xmlString::TLS_VERIFY = "verify";

// TLS Options
const char* xmlString::TLS_OPTION = "option";
const char* xmlString::TLS_DEFAULT_WORKAROUNDS = "DEFAULT_WORKAROUNDS";
const char* xmlString::TLS_NO_COMPRESSION = "NO_COMPRESSION";
const char* xmlString::TLS_NO_SSLV2 = "NO_SSLV2";
const char* xmlString::TLS_NO_SSLV3 = "NO_SSLV3";
const char* xmlString::TLS_NO_TLSV1 = "NO_TLSV1";
const char* xmlString::TLS_NO_TLSV1_1 = "NO_TLSV1_1";
const char* xmlString::TLS_NO_TLSV1_2 = "NO_TLSV1_2";
const char* xmlString::TLS_NO_TLSV1_3 = "NO_TLSV1_3";
const char* xmlString::TLS_SINGLE_DH_USE = "SINGLE_DH_USE";

// TLS Verify Mode
const char* xmlString::TLS_VERIFY_NONE = "VERIFY_NONE";
const char* xmlString::TLS_VERIFY_PEER = "VERIFY_PEER";
const char* xmlString::TLS_VERIFY_FAIL_IF_NO_PEER_CERT = "VERIFY_FAIL_IF_NO_PEER_CERT";
const char* xmlString::TLS_VERIFY_CLIENT_ONCE = "VERIFY_CLIENT_ONCE";

// Requester and Replier
const char* xmlString::SERVICE_NAME = "service_name";
const char* xmlString::REQUEST_TYPE = "request_type";
const char* xmlString::REPLY_TYPE = "reply_type";
const char* xmlString::REQUEST_TOPIC_NAME = "request_topic_name";
const char* xmlString::REPLY_TOPIC_NAME = "reply_topic_name";

// E2E Protection
const char* xmlString::E2E_PROTECTION = "e2e_protection";
// E2E Profile04
const char* xmlString::E2E_P04_MIN_DATA_LENGTH = "e2e_p04_minDataLength";
const char* xmlString::E2E_P04_MAX_DATA_LENGTH = "e2e_p04_maxDataLength";
const char* xmlString::E2E_P04_MAX_DELTA_COUNTER = "e2e_p04_maxDeltaCounter";
// E2E deadline
const char* xmlString::E2E_DEADLINE_COUNTER = "e2e_deadline_counter";
// E2E liveliness
const char* xmlString::E2E_LIVELINESS_KIND = "e2e_liveliness_kind";
const char* xmlString::E2E_LIVELINESS_LEASE_DURATION = "e2e_liveliness_lease_duration";

// compatible with DSF
const char* xmlString::DSF_DSFPARTICIPANTID = "dsfParticipantId";

}  // namespace xmlparser

const char* constString::DSF_SHM_DRIVER_PATH = "/dev/unimem_heap/system";

const char* flowctlString::EDDS_FLOW_CONTROLLER_DEFAULT = "EDDSFlowControllerDefault";
const char* flowctlString::EDDS_STATISTICS_FLOW_CONTROLLER_DEFAULT = "EDDSStatisticsFlowControllerDefault";

}  // namespace vbsutil
